package com.lyf.scm.plan.insfrastructure.db.mapper;

import com.lyf.scm.plan.api.dto.DemandPlanDTO;
import com.lyf.scm.plan.api.dto.SalesPlanDirectlyConditionDTO;
import com.lyf.scm.plan.api.dto.SalesPlanDirectlyDTO;
import com.lyf.scm.plan.insfrastructure.db.dataobject.SalesPlanDirectlyDO;
import com.lyf.scm.plan.insfrastructure.db.dataobject.SalesPlanSelectDO;
import com.lyf.scm.plan.insfrastructure.db.dataobject.bigdata.DirectlyInDO;
import com.lyf.scm.plan.insfrastructure.db.dataobject.bigdata.DirectlyUpDO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * description:
 * 直营预测计划数据访问层
 *
 * @author: haodong
 * @data: 2020/8/3 10:04
 */
public interface SalesPlanDirectlyMapper {

    /**
     * 条件分页查询
     *
     * @param salesPlanSelect
     * @return
     */
    List<SalesPlanDirectlyDO> listByPage(SalesPlanSelectDO salesPlanSelect);

    /**
     * 根据分页后的参数查询
     *
     * @param salesPlanDirectly
     * @return
     */
    List<SalesPlanDirectlyDO> listByConditions(SalesPlanDirectlyDO salesPlanDirectly);

    /**
     * 查询直营预测计划
     *
     * @param salesPlanSelect
     * @param pageSize
     * @param pageNum
     * @return
     */
    List<SalesPlanDirectlyDO> listByCycles(@Param("dto") SalesPlanSelectDO salesPlanSelect,
                                           @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);


    /**
     * 根据id集合查询
     *
     * @param idList
     * @return
     */
    List<SalesPlanDirectlyDO> listByIdList(List<Long> idList);


    /**
     * 根据品类 区域 时间条件筛选有效信息
     *
     * @param salesPlanSelectDO
     * @return {@link List<SalesPlanDirectlyDTO>}
     **/
    List<SalesPlanDirectlyConditionDTO> listByPlanConditions(SalesPlanSelectDO salesPlanSelectDO);

    /**
     * 根据起始时间查询直营预测计划量
     *
     * @param demandPlan 需求计划
     * @return {@link SalesPlanDirectlyDO}
     */
    List<SalesPlanDirectlyDO> listForestPlanQty(DemandPlanDTO demandPlan);

    /**
     * 大数据取数据接口（门店+日期）
     *
     * @param storeCode
     * @param startDate
     * @param endDate
     * @return {@link List<DirectlyUpDO>}
     **/
    List<DirectlyUpDO> listAllByStoreAndDate(@Param("storeCode") String storeCode, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 大数据取数据接口（门店+日期）
     *
     * @param storeCode
     * @param startDate
     * @param endDate
     * @return {@link List<DirectlyUpDO>}
     **/
    List<DirectlyInDO> listInByStoreAndDate(@Param("storeCode") String storeCode, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
    /**
     * 大数据取数据接口（门店+日期）
     *
     * @param storeCode
     * @param startDate
     * @param endDate
     * @return {@link List<DirectlyUpDO>}
     **/
    List<DirectlyUpDO> listUpByStoreAndDate(@Param("storeCode") String storeCode, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
    /**
     * 大数据批量新增
     *
     * @param directlyInDOs
     * @return void
     **/
    void batchInsert(List<DirectlyInDO> directlyInDOs);

    /**
     * 大数据批量更新
     *
     * @param updateList
     * @return void
     **/
    void batchUpdate(List<SalesPlanDirectlyDO> updateList);

    void batchDeleteByStartDate(@Param("storeCode") String storeCode, @Param("startDate") Date startDate);

    /**
     * 根据标识查询对应ids
     *
     * @param opSign
     * @return
     */
    List<Long> getIdsByOpSign(@Param("opSign") String opSign);


    /**
     * 根据标识删除直营预测计划表
     *
     * @param opSign
     */
    void delete(@Param("opSign") String opSign);

    void rmByIds(List<Long> ids);

    void upByIds(List<DirectlyUpDO> list);

    Integer getTotal(SalesPlanSelectDO salesPlanSelect);

    List<String> getSkuList(SalesPlanSelectDO salesPlanSelect);

    void deleteByOpSign(String opSign);
}
